Что такое "назначить пользовательский параметр юнита или предмета" и как им пользоваться?
Используется для сохранения каких-нибудь своих данных в этот конкретный предмет или юнита
Добрые люди, как присвоить глобальной переменной (целочисленной) цену определенного предмета (так чтобы если изменить цену в редакторе объектов, то в редакторе триггеров она сама изменялась) или какая главная характеристика определенного героя (разум, сила, ловкость).
название KillUnit не совсем подходит
я бы назвал killUnitFromUnit или просто killFromUnit Пушистый, а можно проще
define KillUnit(a) = KillUnit2(a)
по поводу правил
название должны соответствовать выполняемой функции
например если логическая переменная хранит жив юнит или нет то называться она должна isAlive или как то так
+ различные правила написания для различных языков
например в java первое слово в названии функции/переменной пишется с маленькой буквы а остальные с большой, а в названиях классов все слова с большой
в jass официальных соглашений нету но близы писали в функциях каждое слово с большой а константы большими буквами разделяя слова _
DenisYulamanov,
Игрок ввел -тест как подстроку
Введеное собщение к примеру 1, 5 = -тест
Установить значение, как введеная строка, 7,введеная длина сообщения
Лимит операций примерно 4 к. А у тебя тут поболее 16к.
Обойти лимит операций можно только разнеся действия в разные потоки. К примеру для через таймер.
PT153, ну call просто вызываешь потоком (он не создает поток), например у тебя в ряд выставлены сверху вниз названия функции со скобочками (и внутри скобок аргументы, а если не берет никаких аргументов, то внутри скобок пусто) и через call вызывает одну за другой последовательно сверху вниз.
call название функции (аргументы)
Допустим первую верхнюю функцию вызвали, и ее обработали, потом поток берет вторую внизу функцию и обрабатывает и т.д. Но у потока есть ограничения в операциях, как только выполнится определенное количество операций, варкрафт экстренно завершает поток и даже не сообщает об этом.
call функция 1()
call функция 2()
......
call функция 999()
Тут хочу обратить внимание и на то, насколько длинный код в этой вызываемой функции. И сколько вызываемой работы потребует: всякие вычисления, бесконечные циклы и другое. Если длинный код у тебя, и кучу циклов, и сами циклы большую работу совершают, то следует разбить на участки или как-то переделать что ли, уменьшить работу цикла и др.
Можно разбить на функции и ...
вызывать через call, но так делать не стоит. Поток вызывает эти функции последовательно.
Нужно делать задержку (через вэйт), например в ИИ-скриптах варкрафта делают задержку, чтобы не было нагрузки. Вместо вэйта можно таймер.
через ExecuteFunc, ExecuteFunc создает отдельный новый поток. информацию про ExecuteFunc скидывал выше.
Если у героя полностью заполнен инвентарь, то герой не сможет подбирать предметы, и ничего с этим сделать нельзя. Исключением являются руны и книги. Сделайте два варианта каждого предмета: пустышку, на основе руны, и настоящий, который хранится в инвентаре героя и имеет реальный эффект. Нет, другого способа нету.
Grok,
FSGUI - использование специальных декораций со сменными текстурами и зон реакции на мышку (не помню уже как они называются) в совокупности с фиксированной камерой для создания полноэкранного меню с произвольным содержимым (открытие такого меню перемещает камеру в специальную локацию, что не всегда удобно т.к. не видно персонажа и им толком нельзя управлять), в том числе так делали инвентари, системы крафта, деревья навыков и много чего другого.
DGUI - развитие идеи FSGUI, только вместо декораций используются юниты со специальной моделью в совокупности с камерой, положение которой полностью управляется из кода - так можно создать иллюзию окон и кнопок прямо на месте, не перемещая камеру в специальную локацию и тем более не мешая управлению персонажем. Учитывая особенности реализации, должно быть понятно, что это работает только с видимой областью, где могут отображаться юниты и совершенно не пригодно для манипуляций с панелью.
ну вот в чём твоя ошибка: Ты изменил название текстуры, а значит ты изменил и пути, тебе нужно зайти в war3modelEditor и там уже открыв модель выбрать вкладку: Windows=>Texture Manager, где будет список текстур, ты удаляешь 1 старую текстуру, которая у тебя была и добавляешь новую, при этом модель с текстурой должны лежать в одной папке, которая не содержит кириллицы (например путь должен быть d:\Users\User\Desktop\moroz - без русских букв ).
Переименовать новую текстуру на старую по идее не имеет смысла, потому что опять же ты сохранил её без текстуры, а => испоганил, накосячил, сломал (называй как хочешь).
Т.е. ты сначала отдаешь от героя в рюкзак, а потом сразу же забираешь из рюкзака герою? И нафига? Нет, я понял, что у тебя с логикой туго, но все равно должен спросить.
Для простоты и аналогичности: создаёшь третьего юнита, кидаешь ему шмот из рюкзака, кидаешь шмот героя в рюкзак, кидаешь из третьего юнита в героя.
Все предметы изночально принадлежать враждебным, юзайте Custom value предмета, если 0 то предмет еще никто не подобрал, значит его получили убив монстра или купили, значит ставим ему custom value с номером игрока (нумеруйте не с 0, а с 1). Легко и просто, правда?
IGOREIK, там четыре события на применение способности.
Пробуй разные, выбери, какое подойдёт лучше.
Вариант 8gabriel8 лучше. Немного дополню. Можно найти модель спецэффекта, который применяется во время включения способности. Посмотреть редакторами моделей (War3ME, например), какой там звук используется. И прописать импортированному звуку этот путь.
Эх... Странные вопросы задаешь. Выделяешь/выбираешь тригггер, жмешь правка - конвентировать в текст
А про последствия не понял, разве бой своего юнита с чужим не есть отслеживание последствий?
отпечатка, случайно написал не. Да это последствие. По-другому никак.
Вот самый простой вариант от неуязвимости и всемогущества whosyourdaddy, который переводится как "кто твой папочка":
Создаешь юнита в РО, так сказать будет куклой для битья. Если она умрет, то значит ее убили нечестным образом.
Юнита надо будет отредактировать
Делаем куклу незаметной. Так сказать нужно скрыть.Удаляешь у нее модель, потом скрываешь отображение на мини-карте (характеристики - скрыть мини-карту).
Если это рабочий то выключить у него классификация - работник. Иначе иконка будет отображаться в игре.
Делаешь так чтобы не мог атаковать, короче полностью отключаешь атаку (бои - атаки - нет)
Делаешь его неподвижным, чтобы не убегал, когда его бьют
Делаем неубиваемым. Реген. Скорость восстановления здоровья на максимум - 9999к. Запас здоровья тоже повыше (примечание: здоровье не должно быть слишком большим, а то ставил 9999к читом не мог убить, даже с 5000 хп,видимо из-за регена не умирал, поставил 1000). Затем можно дать невосприимчивость от магии, так сказать защитой от магии будет.
даем способность москиты, так герой становится невыделяемый
и убираем обзор видимости (характеристики - радиус обзора = 0 днем и ночью)
создаем двух таких на карте, одного делаем вражеским (можно за нейтрально-враждебного), а другого за игрока
создаем триггер, который будет наносить урон периодически от лица игрока, наносит 1 единицу урон. другой триггер ловит смерть
Все работает. работает с специальными переменными, типа GetFilterUnit(). Вообще это условие, если это условие (фильтр) истинно, то этого юнита (GetFilterUnit), подходящего по условию, оставляет, а остальных отсеивает. У тебя, если условие истинно, выбирает всех. Мне кажется не работает. потому что радиус слишком маленький 90 - слишком маленький, едва ли кого выделишь. Надо еще дебагом проверять (выводи на экран) и проверяй кол-во юнитов в группе. Так написал, что не понятно, что тебе нужно. И вопрос закрыт? (закрой тему)
чтобы глобалки объявлять скачай jngp, подключи jasshelper (V jass)
хотя ладно я сейчас добрый так что лови совет
вместо игрок 1 используй владелец выбранного юнита
и вместо того чтобы сразу добавлять ресурсы заноси их в переменную
и добавляй в конце Nosferoh, сори но то что ты сказал это не оптимально
зачем усложнять ?
Если в триггере много действий, загружающих память, то лучше не использовать малый период. А если в нём ещё утечки памяти, то рано или поздно лаги сделают игру невозможной.
По сути, и таймер, и периодическое событие запускают действия в определённое время, то есть действуют одинаково. Смотри, что тебе удобнее.
ClotPh, Движок знает во время завершения удара, будет промах или нет, сработает пассивка или нет, а ты нет, там не так все просто, так что триггерные аналоги изобретаем и усе.
Странное понимание механики. Не бывает универсального лучшего способа, потому и существуют разные способы для конкретных ситуаций.
А экономить байты и такты процессора, заранее пользуясь интерпретируемым скриптовым языком, это вообще моветон.
Разве массив в WarCraft III не предынициализирует 8192 ячейки памяти (по Вашей формуле, в моём случае он потребляет 8192*4=32768 байт, то есть 32Кб)? Он ведь не динамический.
Нет, он динамический. Исходный размер при создании - 1024. И расширяется на 1024 ячейки по мере доступа вплоть до максимальных 8192.
Ну как бы диологовые окна работают как как их сделали, раз вы сделали диалок для одного игрока то его и видит 1 игрок.
Диалоговое окно нужно показывать всем играющим игрокам, и создавать триггер (на гуях проще 1 кнопка=1 триггер который следит за кнопной) и по нажатию кнопки смотреть какой игрок нажал на кнопку и создавать для него необходимого персонажа.
Сделай плюсик в качестве способности-пустышки.
При её использовании создавай/выделяй юнита-пустышку, у которого есть способности-пустышки, соответствующие способностям героя.
При использовании этих пустышек будет прокачиваться способность героя.
в чем редактор вкв3 отличается от редактора ск2 - к сожалению, в вк3-шном эдиторе не удастся отловить все данные.
если ты скажешь, что конкретно делает твой спелл, тебе могут подсказать более легкий вариант исполнения
насчет спецэффектов - утечка решается просто
создаешь точку, если спец на земле. если спец на юните, точка не требуется.
собсно воспроизводишь спец
и сразу его удаляешь. спец удалится тогда, когда доиграет до конца его анимация
кастом скриптом удаляешь точку, если 1 часть 1 пункта актуальна
Через что уничтожаешь? Если через килл, то конечно умирает и нейтральный.
Если наносить от какого-то даммика урон в мильены, то не умрет нейтральный.
Можно от даммика развеяние нежити за 0.01 сек.
Заменять можно, внося значение золота в переменную и потом, создавая новый рудник, ставить количество золота в него из переменной, благо это даже в ГУИ реализовано.
Можно сделать способность на основе "превращения в зомби" с передачей контроля игроку. И сделать дамми работников, которые будут в невидимости таскать золото, в зависимости от кол-во рабов на борту рудника.
Можно сделать невидимое "Древо Жизни" которое привязано к зданию и живет до тех пор, пока живет главное здание, главное связать здания триггерно.
Я придумал закинуть пустить корни в книгу заклинаний и заблокировал ее, в вобщем оплетение работает, сейчас другая проблема в другом вопросе))
На сайте имеется статья. Если же тебя интересует как сделать чтобы эти расы можно было выбирать в меню игры, а не непосредственно в игре - ищи в гугле [Warcraft 3 Nirvana Mod]. Отвечая на вопрос: возможно.
Local integer i = случайное число от 1 до 3
Local integer h = случайное число от 1 до 3
Local integer j = 0
Local integer k = взять кол-во юнитов в области locations[h]
Local location p
If k < 1 then
Set p = GetRectCenter( locations[h] )
Call createUnitAtLoc( buildings[i], player(0), p )
Loop
Exitwhen j > 3
Call createUnitAtLoc( units[i], player(0), p )
Set j = j + 1
Endloop
Call removeLocation(p)
Set p = null
Endif
Это число обозначает, сколько элементов массива заполняется в начале игры значением по умолчанию. Настоящий размер массива всегда 8192.
Т.е. если ты ставишь "Раз. 3" и "Нач. знач. 1", то первые 3 элемента массива будут равны 1, а значение следующих будет неопределенным.
Чето совершенно непонятно что вам нужно, найти тот таймер и его индекс в массиве, который истек и запустил триггер?
Ну очень просто , перебором в цикле всех таймеров и смотреть кто истек, тот кто истек того индекс вы и получите, считая шаги цикла.
В чем проблема?.
(100+ таймеров и массив по мне идиотия, неужели нельзя было воспользоваться хештаблицей и создавать\удалять таймеры по мере надобности)
Полагаю, действия "группа игроков" - лишние. Просто пикай юнитов. И не в регионе, а в радиусе. Там должно быть действие "пикнуть юнитов в радиусе, которые соответствуют каким-то условиям". Вот в matching condition и проверяй "правильность" юнита.
на сколько я понял твой триггер срабатывает при получении урона определённым юнитом
и ты вызываешь в нём этот триггер
который наносит урон этому самому юниту
в результате опять срабатывает отлов урона
и опять наносится урон
и опять ...
в общем получается рекурсия и вар выкидывает из за переполнения стека
кстати почему бы не сделать отлов урона в 1 триггере?
Hate, мне нужен рабочий вариант чтоб меняя свои данные я понял что влияет на работоспособность,а что нет.В твоей же я увидел цифры по 15сек думал атк и будет работать,а на деле только 9 сек рабочих.Напрашивается вывод где из всех тех цифр отвечающие за продолжительность. Может у кого есть уже наработка с хотами,дотами,периодическими событиями,киньте будьте добры,буду разбираться.
это и есть рабочий вариант, слов нет.
там урон наносится каждые 5 секунд в течении 15, если бы вы потратили хоть толику внимания на гребаные триггеры вы бы заметили цифры которые там есть
Ну можно триггерно их "строить", когда нужно получать % их готовности.
Здание закладывать и паузить, триггерно увеличивать переменную и приравнивать в ней текущий % постройки.
Работоспособно.
Да. Сам id-приказ - равкод постройки (или тип постройки). У рабочего открывается меню строительства, выбираешь постройку, нажимаешь на иконку. Но ничего не происходит, так как надо еще для окончательного результата выбрать место строительства. Через событие "юнит - получил приказ (точка)" ловится приказ в тот момент, когда юнит получил приказ и побежал устанавливать основание. И точку приказа можно отследить.
ии я очень сложный замутил 4х ступенчатый (не для босов)так как при строительстве его я думал что движок будет пулять спеллы,его придёться переписывать,но я нашел решение если за моба стоит комп то спелы во вкладке нейтрально посивные он будет юзать но не все главное условие чтобы был комп назначен
» WarCraft 3 / Переменные
» WarCraft 3 / Циклы
» WarCraft 3 / Крафт предметов.
» WarCraft 3 / Замена стандартных моделей.
» WarCraft 3 / передача предмета игроку
» WarCraft 3 / Как использовать % ?
» WarCraft 3 / Угол крена
» WarCraft 3 / Читы
» WarCraft 3 / Вопрос инкома
» WarCraft 3 / Проверка включенного триггера используя триггеры
» WarCraft 3 / 1 защиты = 1% блока
» WarCraft 3 / Декорации (база)
» WarCraft 3 / Выбор героев
» WarCraft 3 / Покупка спелов
» WarCraft 3 / Строчка
» WarCraft 3 / Оплетение рудника
» WarCraft 3 / Рандом выбор .
» WarCraft 3 / Напомните название карты
» WarCraft 3 / Массивы
» WarCraft 3 / Нанесение урона
» WarCraft 3 / Идентификаторы юнитов
» WarCraft 3 / Строительство
» WarCraft 3 / Стандартные способности